package tech.aistar.corejava.test.prototype;
/**
 * 实现了通用的订单处理
 * 核心业务实现处理类
 * 【原始订单X1：个人客户姓名：Tom, 产品编号：43u4i33dfdf884 ,产品数量:2900 】
 * 
 * 子订单x1a: 个人客户姓名：Tom, 产品编号：43u4i33dfdf884 ,产品数量:1000
 * 子订单x1b: 个人客户姓名：Tom, 产品编号：43u4i33dfdf884 ,产品数量:1000
 * 原始订单： ...................................     产品数量:2900-1000-1000  
 * 
 * ----------------------------------------
 * 面向接口编程：安全性
 * 			无需关心实现子类（1. 扩展性  2.维护性）
 * 
 * 原型模式：本质是克隆本身（创建一个自身对象，并复制原始对象的所有属性）
 * 优势：1.业务处理 不需要依赖于 实现子类， 实现可扩展性
 * 
 * 
 */
public class OrderBusiness {
	/**
	 * 
	 * @param order 原始订单
	 */
	public void saveOrder(IOrderProcess order){
		 while(order.getOrderProductNum()>1000){
			 
			 IOrderProcess subOrder =  order.cloneOrder();//克隆出一个新的子订单
			 subOrder.setOrderProductNum(1000);
			 order.setOrderProductNum(order.getOrderProductNum() -1000);
			 System.out.println("产生的子订单 的信息是：" +subOrder);
			 
		 }
		 System.out.println("原始订单 的信息是：" +order);
			 
	}
}
